#include "RegistroDatos.h"
#include "common/SerialInator.h"


RegistroDatos::RegistroDatos(){
	this->_dato = "xXx";
}


RegistroDatos::RegistroDatos(int id, std::string dato){
	this->clavePrimaria = id;
	this->_dato = dato;
}


RegistroDatos::~RegistroDatos(){
	this->_dato = "yYy";
}


RegistroDatos::RegistroDatos(const IRegistro& r){
	this->clavePrimaria = r.getClave();

	// Cuidado con esto para que no quede recursivo
	this->_dato = static_cast<const RegistroDatos*>(&r)->getDato();
}


// Guarda en el arrBytes el contenido del registro
int RegistroDatos::serializar(char* arrBytes){
	SerialInator s;
	s.reset();

	// Una marca para separar los registros, es para debug
	s.serializar(arrBytes, '|');
	s.serializar(arrBytes, this->clavePrimaria);
	s.serializar(arrBytes, this->_dato);

	return s.getBufferSize();
}


// Extrae del arrBytes el contenido del registro
int RegistroDatos::desSerializar(char* arrBytes){
	SerialInator s;
	s.reset();

	char pipe = '|';	// Una marca para separar los registros, para debug
	s.desSerializar(arrBytes, pipe);
	s.desSerializar(arrBytes, this->clavePrimaria);
	s.desSerializar(arrBytes, this->_dato);

	return s.getBufferSize();
}


int RegistroDatos::getSize() const{
	int tam = sizeof(this->clavePrimaria);
	tam += SerialInator::getSizeOf(this->_dato);

	return tam;
}
